import os
import pandas as pd
import numpy as np
import math
import datetime as dt
import matplotlib.pyplot as plt
# for Evolution we will use these Library
from sklearn.metrics import mean_squared_error, mean_absolute_error, explained_variance_score, r2_score
from sklearn.metrics import mean_poisson_deviance, mean_gamma_deviance, accuracy_score
from sklearn.preprocessing import MinMaxScaler
# for model building we will use these Library
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense ,Dropout
from tensorflow.keras.layers import LSTM
#for plooting we will uses these libraries
import matplotlib.pyplot as plt
from itertools import cycle
import plotly.graph_objects as go
import plotly.express as px
from plotly.subplots import make_subplots
#from plotly.subplots import make_subplotsoad our data set
#load dataset
maindf = pd.read_csv('BTC.csv')
maindf.head()
| Date | Open | High | Low | Close | Adj Close | Volume | |
|---|---|---|---|---|---|---|---|
| 0 | 2014-09-17 | 465.864014 | 468.174011 | 452.421997 | 457.334015 | 457.334015 | 21056800 |
| 1 | 2014-09-18 | 456.859985 | 456.859985 | 413.104004 | 424.440002 | 424.440002 | 34483200 |
| 2 | 2014-09-19 | 424.102997 | 427.834991 | 384.532013 | 394.795990 | 394.795990 | 37919700 |
| 3 | 2014-09-20 | 394.673004 | 423.295990 | 389.882996 | 408.903992 | 408.903992 | 36863600 |
| 4 | 2014-09-21 | 408.084991 | 412.425995 | 393.181000 | 398.821014 | 398.821014 | 26580100 |
os.getcwd()
'C:\\Users\\cheta\\OneDrive\\Documents'
os.chdir('C:\\Users\\cheta\\OneDrive\\Documents')
print('total number of days present in the dataset: ', maindf.shape[0])
print('total number of fields present in the dataset:',maindf.shape[1])
total number of days present in the dataset: 2713 total number of fields present in the dataset: 7
maindf.shape
(2713, 7)
maindf.head()
| Date | Open | High | Low | Close | Adj Close | Volume | |
|---|---|---|---|---|---|---|---|
| 0 | 2014-09-17 | 465.864014 | 468.174011 | 452.421997 | 457.334015 | 457.334015 | 21056800 |
| 1 | 2014-09-18 | 456.859985 | 456.859985 | 413.104004 | 424.440002 | 424.440002 | 34483200 |
| 2 | 2014-09-19 | 424.102997 | 427.834991 | 384.532013 | 394.795990 | 394.795990 | 37919700 |
| 3 | 2014-09-20 | 394.673004 | 423.295990 | 389.882996 | 408.903992 | 408.903992 | 36863600 |
| 4 | 2014-09-21 | 408.084991 | 412.425995 | 393.181000 | 398.821014 | 398.821014 | 26580100 |
maindf.tail()
| Date | Open | High | Low | Close | Adj Close | Volume | |
|---|---|---|---|---|---|---|---|
| 2708 | 2022-02-15 | 42586.464844 | 44667.218750 | 42491.035156 | 44575.203125 | 44575.203125 | 22721659051 |
| 2709 | 2022-02-16 | 44578.277344 | 44578.277344 | 43456.691406 | 43961.859375 | 43961.859375 | 19792547657 |
| 2710 | 2022-02-17 | 43937.070313 | 44132.972656 | 40249.371094 | 40538.011719 | 40538.011719 | 26246662813 |
| 2711 | 2022-02-18 | 40552.132813 | 40929.152344 | 39637.617188 | 40030.976563 | 40030.976563 | 23310007704 |
| 2712 | 2022-02-19 | 40026.023438 | 40418.878906 | 39713.058594 | 40122.156250 | 40122.156250 | 13736557863 |
maindf.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 2713 entries, 0 to 2712 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Date 2713 non-null object 1 Open 2713 non-null float64 2 High 2713 non-null float64 3 Low 2713 non-null float64 4 Close 2713 non-null float64 5 Adj Close 2713 non-null float64 6 Volume 2713 non-null int64 dtypes: float64(5), int64(1), object(1) memory usage: 148.5+ KB
maindf.describe()
| Open | High | Low | Close | Adj Close | Volume | |
|---|---|---|---|---|---|---|
| count | 2713.000000 | 2713.000000 | 2713.000000 | 2713.000000 | 2713.000000 | 2.713000e+03 |
| mean | 11311.042503 | 11614.356195 | 10975.445286 | 11323.913062 | 11323.913062 | 1.470147e+10 |
| std | 16106.431449 | 16537.501329 | 15608.369333 | 16110.362193 | 16110.362193 | 2.001575e+10 |
| min | 176.897003 | 211.731003 | 171.509995 | 178.102997 | 178.102997 | 5.914570e+06 |
| 25% | 606.396973 | 609.260986 | 604.109985 | 606.718994 | 606.718994 | 7.991080e+07 |
| 50% | 6301.569824 | 6434.617676 | 6214.220215 | 6317.609863 | 6317.609863 | 5.098183e+09 |
| 75% | 10452.399414 | 10762.644531 | 10202.387695 | 10462.259766 | 10462.259766 | 2.456992e+10 |
| max | 67549.734375 | 68789.625000 | 66382.062500 | 67566.828125 | 67566.828125 | 3.509679e+11 |
print('Null Values:',maindf.isnull().values.sum())
Null Values: 0
print('NA values:',maindf.isnull().values.any())
NA values: False
# Final shape of the dataset after dealing with null values
maindf.shape
(2713, 7)
#Printing the start and end date of the dataset
sd=maindf.iloc[0][0]
ed=maindf.iloc[-1][0]
print ('Starting Date',sd)
Starting Date 2014-09-17
print('Ending Date',ed)
Ending Date 2022-02-19
Bitcoin Price Prediction fron Start
maindf['Date']=pd.to_datetime(maindf['Date'],format='%Y-%m-%d')
y_2014 = maindf.loc[(maindf['Date']>= '2014-09-17') &(maindf['Date']<'2014-12-31')]
y_2014.drop(y_2014[['Adj Close','Volume']],axis=1)
| Date | Open | High | Low | Close | |
|---|---|---|---|---|---|
| 0 | 2014-09-17 | 465.864014 | 468.174011 | 452.421997 | 457.334015 |
| 1 | 2014-09-18 | 456.859985 | 456.859985 | 413.104004 | 424.440002 |
| 2 | 2014-09-19 | 424.102997 | 427.834991 | 384.532013 | 394.795990 |
| 3 | 2014-09-20 | 394.673004 | 423.295990 | 389.882996 | 408.903992 |
| 4 | 2014-09-21 | 408.084991 | 412.425995 | 393.181000 | 398.821014 |
| ... | ... | ... | ... | ... | ... |
| 100 | 2014-12-26 | 319.152008 | 331.424011 | 316.627014 | 327.924011 |
| 101 | 2014-12-27 | 327.583008 | 328.911011 | 312.630005 | 315.863007 |
| 102 | 2014-12-28 | 316.160004 | 320.028015 | 311.078003 | 317.239014 |
| 103 | 2014-12-29 | 317.700989 | 320.266998 | 312.307007 | 312.670013 |
| 104 | 2014-12-30 | 312.718994 | 314.808990 | 309.372986 | 310.737000 |
105 rows × 5 columns
monthvise=y_2014.groupby(y_2014['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
| Open | Close | |
|---|---|---|
| Date | ||
| January | NaN | NaN |
| February | NaN | NaN |
| March | NaN | NaN |
| April | NaN | NaN |
| May | NaN | NaN |
| June | NaN | NaN |
| July | NaN | NaN |
| August | NaN | NaN |
| September | 412.654003 | 407.182428 |
| October | 365.748000 | 364.148873 |
| November | 364.850235 | 366.099799 |
| December | 344.146864 | 341.970366 |
fig=go.Figure()
fig.add_trace(go.Bar(
x=monthvise.index,
y=monthvise['Open'],
name='Bitcoin Open Price',
marker_color='crimson'
))
fig.add_trace(go.Bar(
x=monthvise.index,
y=monthvise['Close'],
name='Bitcoin Close Price',
marker_color='lightsalmon'
))
fig.update_layout(barmode='group',xaxis_tickangle= -45,
title='Monthvise comparison between Bitcoin open and close price')
fig.show()
y_2014.groupby(y_2014['Date'].dt.strftime('%B'))['Low'].min()
monthvise_high=y_2014.groupby(maindf['Date'].dt.strftime('%B'))['High'].max()
monthvise_high=monthvise_high.reindex(new_order,axis=0)
monthvise_low=y_2014.groupby(y_2014['Date'].dt.strftime('%B'))['Low'].min()
monthvise_low=monthvise_low.reindex(new_order,axis=0)
fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise_high.index,
y=monthvise_high,
name='Bitcoin high Price',
marker_color='rgb(0,153,204)'
))
fig.add_trace(go.Bar(
x=monthvise_low.index,
y=monthvise_low,
name='Bitcoin low Price',
marker_color='rgb(255,128,0)'
))
fig.update_layout(barmode='group',
title='Monthvise High and Low Bitcoin price')
fig.show()
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_2014 ,x=y_2014.Date,y=[y_2014['Open'],y_2014['Close'],
y_2014['High'],y_2014['Low']],
labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()
maindf['Date']=pd.to_datetime(maindf['Date'],format='%M/%d/%Y')
y_2015=maindf.loc[(maindf['Date']>='2015-01-01')&(maindf['Date']<'2016-01-01')]
y_2015.drop(y_2015[['Adj Close','Volume']],axis=1)
| Date | Open | High | Low | Close | |
|---|---|---|---|---|---|
| 106 | 2015-01-01 | 320.434998 | 320.434998 | 314.002991 | 314.248993 |
| 107 | 2015-01-02 | 314.079010 | 315.838989 | 313.565002 | 315.032013 |
| 108 | 2015-01-03 | 314.846008 | 315.149994 | 281.082001 | 281.082001 |
| 109 | 2015-01-04 | 281.145996 | 287.230011 | 257.612000 | 264.195007 |
| 110 | 2015-01-05 | 265.084015 | 278.341003 | 265.084015 | 274.473999 |
| ... | ... | ... | ... | ... | ... |
| 466 | 2015-12-27 | 416.514008 | 424.006989 | 408.882996 | 422.822998 |
| 467 | 2015-12-28 | 423.342987 | 429.769012 | 418.480988 | 422.278992 |
| 468 | 2015-12-29 | 422.097992 | 432.983002 | 420.627014 | 432.983002 |
| 469 | 2015-12-30 | 433.299988 | 434.386993 | 422.084015 | 426.619995 |
| 470 | 2015-12-31 | 425.875000 | 432.920990 | 418.734985 | 430.566986 |
365 rows × 5 columns
monthvise=y_2015.groupby(y_2015['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
| Open | Close | |
|---|---|---|
| Date | ||
| January | 251.799905 | 248.782547 |
| February | 232.821856 | 234.153645 |
| March | 269.278419 | 269.042259 |
| April | 235.708667 | 235.491534 |
| May | 237.161806 | 236.997001 |
| June | 236.941433 | 238.081766 |
| July | 278.857679 | 279.563740 |
| August | 252.986774 | 250.733805 |
| September | 233.486733 | 233.595533 |
| October | 262.306000 | 264.855356 |
| November | 346.866833 | 348.883332 |
| December | 422.618033 | 424.464547 |
fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise.index,
y= monthvise['Open'],
name='Stock Open Price',
marker_color='crimson'
))
fig.add_trace(go.Bar(
x=monthvise.index,
y= monthvise['Close'],
name='Stock Close Price',
marker_color='Lightsalmon'
))
fig.update_layout(barmode='group',xaxis_tickangle=-45,
title='Monthvise comparision between Bitcoin open and close price ')
fig.show()
y_2015.groupby(y_2015['Date'].dt.strftime('%B'))['Low'].min()
monthvise_high=y_2015.groupby(maindf['Date'].dt.strftime('%B'))['High'].max()
monthvise_high=monthvise_high.reindex(new_order,axis=0)
monthvise_low=y_2015.groupby(y_2015['Date'].dt.strftime('%B'))['Low'].min()
monthvise_low=monthvise_low.reindex(new_order,axis=0)
fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise_high.index,
y=monthvise_high,
name='Bitcoin high Price',
marker_color='rgb(0,153,204)'
))
fig.add_trace(go.Bar(
x=monthvise_low.index,
y=monthvise_low,
name='Bitcoin low Price',
marker_color ='rgb(255,128,0)'
))
fig.update_layout(barmode='group',
title='Monthvise High and Low Bitcoin price')
fig.show()
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_2015 ,x=y_2015.Date,y=[y_2015['Open'],y_2015['Close'],
y_2015['High'],y_2015['Low']],
labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()
maindf['Date']=pd.to_datetime(maindf['Date'],format='%Y-%m-%d')
y_2016=maindf.loc[(maindf['Date']>='2016-01-01')&(maindf['Date']<'2017-01-01')]
y_2016.drop(y_2016[['Adj Close','Volume']],axis=1)
monthvise=y_2016.groupby(y_2016['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
| Open | Close | |
|---|---|---|
| Date | ||
| January | 412.805902 | 410.844485 |
| February | 402.304692 | 404.408274 |
| March | 417.262033 | 416.525774 |
| April | 433.487433 | 434.339398 |
| May | 459.237547 | 461.954415 |
| June | 638.544834 | 642.869061 |
| July | 662.977779 | 661.356103 |
| August | 581.238966 | 579.585197 |
| September | 604.614034 | 605.848633 |
| October | 640.702546 | 643.550935 |
| November | 725.073804 | 726.349101 |
| December | 821.108255 | 828.060356 |
fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise.index,
y= monthvise['Open'],
name='Bitcoin Open Price',
marker_color='crimson'
))
fig.add_trace(go.Bar(
x=monthvise.index,
y= monthvise['Close'],
name=' Bitcoin Close Price',
marker_color='Lightsalmon'
))
fig.update_layout(barmode='group',xaxis_tickangle=-45,
title='Monthvise comparision between Bitcoin open and close price ')
fig.show()
y_2016.groupby(y_2016['Date'].dt.strftime('%B'))['Low'].min()
monthvise_high=y_2016.groupby(maindf['Date'].dt.strftime('%B'))['High'].max()
monthvise_high=monthvise_high.reindex(new_order,axis=0)
monthvise_low=y_2016.groupby(y_2016['Date'].dt.strftime('%B'))['Low'].min()
monthvise_low=monthvise_low.reindex(new_order,axis=0)
fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise_high.index,
y=monthvise_high,
name='Bitcoin high Price',
marker_color='rgb(0,153,204)'
))
fig.add_trace(go.Bar(
x=monthvise_low.index,
y=monthvise_low,
name='Bitcoin low Price',
marker_color='rgb(255,128,0)'
))
fig.update_layout(barmode='group',
title='Monthvise High and Low Bitcoin price')
fig.show()
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_2016 ,x=y_2016.Date,y=[y_2016['Open'],y_2016['Close'],
y_2016['High'],y_2016['Low']],
labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()
maindf['Date']=pd.to_datetime(maindf['Date'],format='%Y-%m-%d')
y_2017=maindf.loc[(maindf['Date']>='2017-01-01')&(maindf['Date']<'2018-01-01')]
y_2017.drop(y_2017[['Adj Close','Volume']],axis=1)
monthvise=y_2017.groupby(y_2017['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
| Open | Close | |
|---|---|---|
| Date | ||
| January | 914.680971 | 914.916159 |
| February | 1055.620071 | 1062.533672 |
| March | 1133.212576 | 1129.365228 |
| April | 1197.646997 | 1206.641007 |
| May | 1865.748712 | 1895.383529 |
| June | 2630.573332 | 2636.204346 |
| July | 2509.213233 | 2519.418386 |
| August | 3819.812579 | 3880.989998 |
| September | 4077.400993 | 4064.836312 |
| October | 5291.370007 | 5360.071604 |
| November | 7685.745996 | 7813.132975 |
| December | 15175.219601 | 15294.270980 |
fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise.index,
y= monthvise['Open'],
name='Bitcoin Open Price',
marker_color='crimson'
))
fig.add_trace(go.Bar(
x=monthvise.index,
y= monthvise['Close'],
name=' Bitcoin Close Price',
marker_color='Lightsalmon'
))
fig.update_layout(barmode='group',xaxis_tickangle=-45,
title='Monthvise comparision between Bitcoin open and close price ')
fig.show()
y_2017.groupby(y_2017['Date'].dt.strftime('%B'))['Low'].min()
monthvise_high=y_2017.groupby(maindf['Date'].dt.strftime('%B'))['High'].max()
monthvise_high=monthvise_high.reindex(new_order,axis=0)
monthvise_low=y_2017.groupby(y_2017['Date'].dt.strftime('%B'))['Low'].min()
monthvise_low=monthvise_low.reindex(new_order,axis=0)
fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise_high.index,
y=monthvise_high,
name='Bitcoin high Price',
marker_color='rgb(0,153,204)'
))
fig.add_trace(go.Bar(
x=monthvise_low.index,
y=monthvise_low,
name='Bitcoin low Price',
marker_color='rgb(255,128,0)'
))
fig.update_layout(barmode='group',
title='Monthvise High and Low Bitcoin price')
fig.show()
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_2017 ,x=y_2017.Date,y=[y_2017['Open'],y_2017['Close'],
y_2017['High'],y_2017['Low']],
labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()
maindf['Date']=pd.to_datetime(maindf['Date'],format='%Y-%m-%d')
y_2018=maindf.loc[(maindf['Date']>='2018-01-01')&(maindf['Date']<'2019-01-01')]
y_2018.drop(y_2018[['Adj Close','Volume']],axis=1)
monthvise=y_2018.groupby(y_2018['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
| Open | Close | |
|---|---|---|
| Date | ||
| January | 13212.074219 | 13085.558090 |
| February | 9462.242920 | 9472.001151 |
| March | 9156.591718 | 9040.557097 |
| April | 7963.618311 | 8033.596631 |
| May | 8505.240675 | 8450.997732 |
| June | 6829.257975 | 6793.507666 |
| July | 7101.466450 | 7146.349987 |
| August | 6723.800955 | 6700.129946 |
| September | 6622.821338 | 6610.675033 |
| October | 6494.016491 | 6485.118747 |
| November | 5481.615120 | 5404.250171 |
| December | 3726.475106 | 3717.488344 |
fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise.index,
y= monthvise['Open'],
name='Bitcoin Open Price',
marker_color='crimson'
))
fig.add_trace(go.Bar(
x=monthvise.index,
y= monthvise['Close'],
name=' Bitcoin Close Price',
marker_color='Lightsalmon'
))
fig.update_layout(barmode='group',xaxis_tickangle=-45,
title='Monthvise comparision between Bitcoin open and close price ')
fig.show()
y_2018.groupby(y_2018['Date'].dt.strftime('%B'))['Low'].min()
monthvise_high=y_2018.groupby(maindf['Date'].dt.strftime('%B'))['High'].max()
monthvise_high=monthvise_high.reindex(new_order,axis=0)
monthvise_low=y_2018.groupby(y_2018['Date'].dt.strftime('%B'))['Low'].min()
monthvise_low=monthvise_low.reindex(new_order,axis=0)
fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise_high.index,
y=monthvise_high,
name='Bitcoin high Price',
marker_color='rgb(0,153,204)'
))
fig.add_trace(go.Bar(
x=monthvise_low.index,
y=monthvise_low,
name='Bitcoin low Price',
marker_color='rgb(255,128,0)'
))
fig.update_layout(barmode='group',
title='Monthvise High and Low Bitcoin price')
fig.show()
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_2018 ,x=y_2018.Date,y=[y_2018['Open'],y_2018['Close'],
y_2018['High'],y_2018['Low']],
labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()
maindf['Date']=pd.to_datetime(maindf['Date'],format='%Y-%m-%d')
y_2019=maindf.loc[(maindf['Date']>='2018-01-01')&(maindf['Date']<'2019-01-01')]
y_2019.drop(y_2019[['Adj Close','Volume']],axis=1)
monthvise=y_2018.groupby(y_2018['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
| Open | Close | |
|---|---|---|
| Date | ||
| January | 13212.074219 | 13085.558090 |
| February | 9462.242920 | 9472.001151 |
| March | 9156.591718 | 9040.557097 |
| April | 7963.618311 | 8033.596631 |
| May | 8505.240675 | 8450.997732 |
| June | 6829.257975 | 6793.507666 |
| July | 7101.466450 | 7146.349987 |
| August | 6723.800955 | 6700.129946 |
| September | 6622.821338 | 6610.675033 |
| October | 6494.016491 | 6485.118747 |
| November | 5481.615120 | 5404.250171 |
| December | 3726.475106 | 3717.488344 |
fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise.index,
y= monthvise['Open'],
name='Bitcoin Open Price',
marker_color='crimson'
))
fig.add_trace(go.Bar(
x=monthvise.index,
y= monthvise['Close'],
name=' Bitcoin Close Price',
marker_color='Lightsalmon'
))
fig.update_layout(barmode='group',xaxis_tickangle=-45,
title='Monthvise comparision between Bitcoin open and close price ')
fig.show()
y_2019.groupby(y_2019['Date'].dt.strftime('%B'))['Low'].min()
monthvise_high=y_2019.groupby(maindf['Date'].dt.strftime('%B'))['High'].max()
monthvise_high=monthvise_high.reindex(new_order,axis=0)
monthvise_low=y_2019.groupby(y_2019['Date'].dt.strftime('%B'))['Low'].min()
monthvise_low=monthvise_low.reindex(new_order,axis=0)
fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise_high.index,
y=monthvise_high,
name='Bitcoin high Price',
marker_color='rgb(0,153,204)'
))
fig.add_trace(go.Bar(
x=monthvise_low.index,
y=monthvise_low,
name='Bitcoin low Price',
marker_color='rgb(255,128,0)'
))
fig.update_layout(barmode='group',
title='Monthvise High and Low Bitcoin price')
fig.show()
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_2018 ,x=y_2018.Date,y=[y_2018['Open'],y_2018['Close'],
y_2018['High'],y_2018['Low']],
labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()
maindf['Date']=pd.to_datetime(maindf['Date'],format='%Y-%m-%d')
y_2020=maindf.loc[(maindf['Date']>='2020-01-01')&(maindf['Date']<'2021-01-01')]
y_2020.drop(y_2020[['Adj Close','Volume']],axis=1)
monthvise=y_2020.groupby(y_2020['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
| Open | Close | |
|---|---|---|
| Date | ||
| January | 8318.949597 | 8389.270476 |
| February | 9656.215113 | 9630.722185 |
| March | 6943.507009 | 6871.016113 |
| April | 7150.611328 | 7224.477328 |
| May | 9237.761530 | 9263.151745 |
| June | 9499.797005 | 9489.227214 |
| July | 9519.383852 | 9589.899729 |
| August | 11639.097215 | 11652.394185 |
| September | 10689.700163 | 10660.276856 |
| October | 11791.307491 | 11886.978201 |
| November | 16450.121647 | 16645.757422 |
| December | 21680.540827 | 21983.137097 |
fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise.index,
y= monthvise['Open'],
name='Bitcoin Open Price',
marker_color='crimson'
))
fig.add_trace(go.Bar(
x=monthvise.index,
y= monthvise['Close'],
name=' Bitcoin Close Price',
marker_color='Lightsalmon'
))
fig.update_layout(barmode='group',xaxis_tickangle=-45,
title='Monthvise comparision between Bitcoin open and close price ')
fig.show()
y_2020.groupby(y_2020['Date'].dt.strftime('%B'))['Low'].min()
monthvise_high=y_2020.groupby(maindf['Date'].dt.strftime('%B'))['High'].max()
monthvise_high=monthvise_high.reindex(new_order,axis=0)
monthvise_low=y_2020.groupby(y_2020['Date'].dt.strftime('%B'))['Low'].min()
monthvise_low=monthvise_low.reindex(new_order,axis=0)
fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise_high.index,
y=monthvise_high,
name='Bitcoin high Price',
marker_color='rgb(0,153,204)'
))
fig.add_trace(go.Bar(
x=monthvise_low.index,
y=monthvise_low,
name='Bitcoin low Price',
marker_color='rgb(255,128,0)'
))
fig.update_layout(barmode='group',
title='Monthvise High and Low Bitcoin price')
fig.show()
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_2020 ,x=y_2020.Date,y=[y_2020['Open'],y_2020['Close'],
y_2020['High'],y_2020['Low']],
labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()
maindf['Date']=pd.to_datetime(maindf['Date'],format='%Y-%m-%d')
y_2021=maindf.loc[(maindf['Date']>='2021-01-01')&(maindf['Date']<'2021-12-31')]
y_2021.drop(y_2021[['Adj Close','Volume']],axis=1)
monthvise=y_2021.groupby(y_2021['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
| Open | Close | |
|---|---|---|
| Date | ||
| January | 34652.961694 | 34761.649950 |
| February | 45874.967216 | 46306.798968 |
| March | 54544.678176 | 54998.008695 |
| April | 57251.256250 | 57206.720052 |
| May | 47105.828503 | 46443.286668 |
| June | 35920.546940 | 35845.154688 |
| July | 34234.212450 | 34444.973790 |
| August | 45516.119834 | 45709.022682 |
| September | 46041.859375 | 45939.771484 |
| October | 57344.743952 | 57911.970514 |
| November | 60857.520313 | 60621.488802 |
| December | 49753.779818 | 49361.767969 |
fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise.index,
y= monthvise['Open'],
name='Bitcoin Open Price',
marker_color='crimson'
))
fig.add_trace(go.Bar(
x=monthvise.index,
y= monthvise['Close'],
name=' Bitcoin Close Price',
marker_color='Lightsalmon'
))
fig.update_layout(barmode='group',xaxis_tickangle=-45,
title='Monthvise comparision between Bitcoin open and close price ')
fig.show()
y_2021.groupby(y_2021['Date'].dt.strftime('%B'))['Low'].min()
monthvise_high=y_2021.groupby(maindf['Date'].dt.strftime('%B'))['High'].max()
monthvise_high=monthvise_high.reindex(new_order,axis=0)
monthvise_low=y_2021.groupby(y_2021['Date'].dt.strftime('%B'))['Low'].min()
monthvise_low=monthvise_low.reindex(new_order,axis=0)
fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise_high.index,
y=monthvise_high,
name='Bitcoin high Price',
marker_color='rgb(0,153,204)'
))
fig.add_trace(go.Bar(
x=monthvise_low.index,
y=monthvise_low,
name='Bitcoin low Price',
marker_color='rgb(255,128,0)'
))
fig.update_layout(barmode='group',
title='Monthvise High and Low Bitcoin price')
fig.show()
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_2021 ,x=y_2021.Date,y=[y_2021['Open'],y_2021['Close'],
y_2021['High'],y_2021['Low']],
labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()
maindf['Date']=pd.to_datetime(maindf['Date'],format='%Y-%m-%d')
y_2022=maindf.loc[(maindf['Date']>='2022-01-01')&(maindf['Date']<'2022-02-19')]
y_2022.drop(y_2022[['Adj Close','Volume']],axis=1)
monthvise=y_2022.groupby(y_2022['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
| Open | Close | |
|---|---|---|
| Date | ||
| January | 41368.073463 | 41114.422379 |
| February | 41722.190538 | 41811.714627 |
| March | NaN | NaN |
| April | NaN | NaN |
| May | NaN | NaN |
| June | NaN | NaN |
| July | NaN | NaN |
| August | NaN | NaN |
| September | NaN | NaN |
| October | NaN | NaN |
| November | NaN | NaN |
| December | NaN | NaN |
fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise.index,
y= monthvise['Open'],
name='Bitcoin Open Price',
marker_color='crimson'
))
fig.add_trace(go.Bar(
x=monthvise.index,
y= monthvise['Close'],
name=' Bitcoin Close Price',
marker_color='Lightsalmon'
))
fig.update_layout(barmode='group',xaxis_tickangle=-45,
title='Monthvise comparision between Bitcoin open and close price ')
fig.show()
y_2022.groupby(y_2022['Date'].dt.strftime('%B'))['Low'].min()
monthvise_high=y_2022.groupby(maindf['Date'].dt.strftime('%B'))['High'].max()
monthvise_high=monthvise_high.reindex(new_order,axis=0)
monthvise_low=y_2022.groupby(y_2022['Date'].dt.strftime('%B'))['Low'].min()
monthvise_low=monthvise_low.reindex(new_order,axis=0)
fig = go.Figure()
fig.add_trace(go.Bar(
x=monthvise_high.index,
y=monthvise_high,
name='Bitcoin high Price',
marker_color='rgb(0,153,204)'
))
fig.add_trace(go.Bar(
x=monthvise_low.index,
y=monthvise_low,
name='Bitcoin low Price',
marker_color='rgb(255,128,0)'
))
fig.update_layout(barmode='group',
title='Monthvise High and Low Bitcoin price')
fig.show()
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_2022,x=y_2022.Date,y=[y_2022['Open'],y_2022['Close'],
y_2022['High'],y_2022['Low']],
labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()
maindf['Date']=pd.to_datetime(maindf['Date'],format='%Y-%m-%d')
y_overall=maindf.loc[(maindf['Date']>='2014-09-17')
&(maindf['Date']<'2022-02-19')]
y_overall.drop(y_overall[['Adj Close','Volume']],axis=1)
| Date | Open | High | Low | Close | |
|---|---|---|---|---|---|
| 0 | 2014-09-17 | 465.864014 | 468.174011 | 452.421997 | 457.334015 |
| 1 | 2014-09-18 | 456.859985 | 456.859985 | 413.104004 | 424.440002 |
| 2 | 2014-09-19 | 424.102997 | 427.834991 | 384.532013 | 394.795990 |
| 3 | 2014-09-20 | 394.673004 | 423.295990 | 389.882996 | 408.903992 |
| 4 | 2014-09-21 | 408.084991 | 412.425995 | 393.181000 | 398.821014 |
| ... | ... | ... | ... | ... | ... |
| 2707 | 2022-02-14 | 42157.398438 | 42775.777344 | 41681.957031 | 42586.917969 |
| 2708 | 2022-02-15 | 42586.464844 | 44667.218750 | 42491.035156 | 44575.203125 |
| 2709 | 2022-02-16 | 44578.277344 | 44578.277344 | 43456.691406 | 43961.859375 |
| 2710 | 2022-02-17 | 43937.070313 | 44132.972656 | 40249.371094 | 40538.011719 |
| 2711 | 2022-02-18 | 40552.132813 | 40929.152344 | 39637.617188 | 40030.976563 |
2712 rows × 5 columns
monthvise=y_overall.groupby(y_overall['Date'].dt.strftime('%B'))[['Open','Close']].mean()
new_order=['January','February','March','April','May','June','July','August','September','October','November','December']
monthvise = monthvise.reindex(new_order,axis=0)
monthvise
| Open | Close | |
|---|---|---|
| Date | ||
| January | 12855.131425 | 12828.374881 |
| February | 12646.924792 | 12711.466195 |
| March | 10918.895761 | 10957.226324 |
| April | 11338.448900 | 11359.962198 |
| May | 10659.455257 | 10580.209317 |
| June | 9299.305977 | 9294.420703 |
| July | 9285.402500 | 9330.128271 |
| August | 11312.971706 | 11345.157739 |
| September | 10489.365578 | 10462.378150 |
| October | 11321.578327 | 11416.077925 |
| November | 12542.362183 | 12537.441752 |
| December | 12391.975010 | 12391.988926 |
name =cycle(['Bitcoin Open Price','Bitcoin Close Price','Bitcoin High Price','Bitcoin Low Price'])
fig=px.line(y_overall, x=y_overall.Date,y=[y_overall['Open'],y_overall['Close'],
y_overall['High'],y_overall['Low']],
labels={'Date':'Date','value':'Bitcoin value'})
fig.update_layout(title_text='Bitcoin analysis chart', font_size=15 , font_color='black',legend_title_text='Bitcoin Parameters')
fig.for_each_trace(lambda t: t.update(name=next(name)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()
.First Step is Preparing Data for Traning and Testing
.Here we are just considering 1 year data for Training data
.As we want to predict Close Price of the Bitcoin so we are just Considering Close and Date
#first take all close price
closedf = maindf[['Date', 'Close']]
print(" Shape of close dataframe :", closedf.shape)
Shape of close dataframe : (2713, 2)
fig= px.line(closedf,x=closedf.Date, y=closedf.Close,labels={'date':'Date','close':'Close Stock'})
fig.update_traces(marker_line_width=2, opacity=0.8 , marker_line_color= 'orange')
fig.update_layout(title_text='Whole period of timeframe of Bitcoin close price 2014-2022', plot_bgcolor= 'white',
font_size=15 , font_color='black')
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()
#Now we will take day of just 1 year
closedf=closedf[closedf['Date']>'2021-02-19']
close_stock=closedf.copy()
print("Total data for prediction:" , closedf.shape[0])
Total data for prediction: 365
closedf
| Date | Close | |
|---|---|---|
| 2348 | 2021-02-20 | 56099.519531 |
| 2349 | 2021-02-21 | 57539.945313 |
| 2350 | 2021-02-22 | 54207.320313 |
| 2351 | 2021-02-23 | 48824.425781 |
| 2352 | 2021-02-24 | 49705.332031 |
| ... | ... | ... |
| 2708 | 2022-02-15 | 44575.203125 |
| 2709 | 2022-02-16 | 43961.859375 |
| 2710 | 2022-02-17 | 40538.011719 |
| 2711 | 2022-02-18 | 40030.976563 |
| 2712 | 2022-02-19 | 40122.156250 |
365 rows × 2 columns
# fig= px.line(closedf,x=closedf.Date, y=closedf.Close,labels={'date':'Date','close':'Close Stock'})
fig.update_traces(marker_line_width=2, opacity=0.8 , marker_line_color= 'orange')
fig.update_layout(title_text='Considered period to predict Bitcoin close price ',
plot_bgcolor= 'white', font_size=15 , font_color='black')
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()
#detecting date column and normalising using MinMaxscaler
del closedf['Date']
scaler = MinMaxScaler(feature_range=(0 ,1))
closedf= scaler.fit_transform(np.array(closedf).reshape(-1 , 1))
print(closedf.shape)
(365, 1)
closedf
array([[0.6963065 ],
[0.7344539 ],
[0.64619461],
[0.50363718],
[0.52696658],
[0.45780566],
[0.43783479],
[0.43382762],
[0.40600193],
[0.52500443],
[0.49184047],
[0.54902489],
[0.49666521],
[0.50636176],
[0.50596658],
[0.56672771],
[0.59426601],
[0.6625295 ],
[0.69389734],
[0.74147666],
[0.72894918],
[0.83252571],
[0.7811275 ],
[0.69121321],
[0.71498745],
[0.76970198],
[0.74290149],
[0.75581826],
[0.7549441 ],
[0.7340163 ],
[0.65471761],
[0.66027385],
[0.60824243],
[0.57990238],
[0.67082398],
[0.69296939],
[0.69236648],
[0.74002214],
[0.77094132],
[0.77097153],
[0.77565847],
[0.78329904],
[0.73614739],
[0.76672684],
[0.77465396],
[0.75173205],
[0.69496692],
[0.7552171 ],
[0.75312626],
[0.79412869],
[0.80503272],
[0.79678282],
[0.89238806],
[0.8819599 ],
[0.8873709 ],
[0.84125737],
[0.81771445],
[0.69939617],
[0.6863685 ],
[0.70619837],
[0.638217 ],
[0.58144142],
[0.56373405],
[0.53611753],
[0.50839964],
[0.64128018],
[0.66806453],
[0.66254501],
[0.62892183],
[0.74002152],
[0.74208392],
[0.71038399],
[0.72545875],
[0.6230539 ],
[0.73138348],
[0.70417198],
[0.72959305],
[0.76792449],
[0.75279025],
[0.68995783],
[0.71233042],
[0.51227367],
[0.52725418],
[0.53160656],
[0.4489691 ],
[0.44091472],
[0.36362164],
[0.34698715],
[0.19055066],
[0.29066583],
[0.19855527],
[0.20469787],
[0.1314434 ],
[0.23566619],
[0.22762164],
[0.25124423],
[0.22854184],
[0.15599414],
[0.1273513 ],
[0.15547834],
[0.19930115],
[0.18214176],
[0.20571872],
[0.24898166],
[0.18768952],
[0.15213688],
[0.16035791],
[0.09940177],
[0.09706927],
[0.19962598],
[0.18260977],
[0.19934201],
[0.15215167],
[0.24604448],
[0.27572225],
[0.28069565],
[0.22616081],
[0.21838638],
[0.15836813],
[0.15382954],
[0.15601245],
[0.04950666],
[0.07146053],
[0.10370057],
[0.12857936],
[0.04847608],
[0.06300218],
[0.12824056],
[0.12253845],
[0.16050088],
[0.13860064],
[0.09970395],
[0.1083092 ],
[0.12874116],
[0.1451406 ],
[0.10430907],
[0.11726453],
[0.10720435],
[0.08130471],
[0.10568641],
[0.09833747],
[0.11739674],
[0.08867972],
[0.07666095],
[0.0798475 ],
[0.05226192],
[0.0427493 ],
[0.04570298],
[0.05268777],
[0.02676108],
[0. ],
[0.06100046],
[0.06636102],
[0.09995379],
[0.1187807 ],
[0.14679333],
[0.19942508],
[0.25423003],
[0.26982783],
[0.27015928],
[0.32914116],
[0.31300345],
[0.26927137],
[0.24880103],
[0.22102086],
[0.26324929],
[0.29296502],
[0.34452678],
[0.39058941],
[0.37052336],
[0.43851384],
[0.41784695],
[0.41807485],
[0.38721246],
[0.47632998],
[0.45788759],
[0.45656497],
[0.4289555 ],
[0.3942854 ],
[0.39708809],
[0.44784066],
[0.51726951],
[0.50578409],
[0.51680543],
[0.52275086],
[0.47402055],
[0.50724854],
[0.45378991],
[0.50984071],
[0.50570226],
[0.50378035],
[0.45677632],
[0.45973461],
[0.50423574],
[0.5169662 ],
[0.53544241],
[0.53330388],
[0.58120669],
[0.6045154 ],
[0.4503182 ],
[0.43125707],
[0.43920292],
[0.39927886],
[0.40768859],
[0.43051233],
[0.4013754 ],
[0.45776966],
[0.48647385],
[0.47606618],
[0.46240498],
[0.48917558],
[0.46221163],
[0.3452498 ],
[0.28830715],
[0.36460142],
[0.39957515],
[0.34514252],
[0.34188092],
[0.35490932],
[0.32914602],
[0.29733448],
[0.31136593],
[0.37033208],
[0.48490057],
[0.47416279],
[0.48709901],
[0.51127702],
[0.5748878 ],
[0.67675988],
[0.63556586],
[0.63985255],
[0.6663459 ],
[0.66113808],
[0.73299317],
[0.69475826],
[0.73077674],
[0.72866934],
[0.84181777],
[0.82323251],
[0.84074964],
[0.85326202],
[0.91247666],
[0.95831531],
[0.85813745],
[0.81793811],
[0.83651229],
[0.82425626],
[0.88010948],
[0.80923903],
[0.75941297],
[0.81608085],
[0.85860867],
[0.84962727],
[0.83453504],
[0.82620466],
[0.8850507 ],
[0.87826153],
[0.83806457],
[0.82941629],
[0.84005745],
[0.88771456],
[1. ],
[0.98424237],
[0.93189531],
[0.93069642],
[0.90966807],
[0.9179729 ],
[0.94438514],
[0.89382913],
[0.8038749 ],
[0.80935076],
[0.71862189],
[0.74980456],
[0.79158525],
[0.76598323],
[0.70133225],
[0.73522533],
[0.70109752],
[0.72742876],
[0.62930998],
[0.66229011],
[0.72673429],
[0.74151494],
[0.720298 ],
[0.72624094],
[0.7063251 ],
[0.63006424],
[0.51360229],
[0.51805533],
[0.5502003 ],
[0.55331106],
[0.54813914],
[0.47312021],
[0.46176369],
[0.51788743],
[0.53737467],
[0.44836774],
[0.44506134],
[0.50555184],
[0.4729429 ],
[0.43419021],
[0.45131526],
[0.44756092],
[0.45214949],
[0.50660828],
[0.4984487 ],
[0.55554767],
[0.55654494],
[0.54615454],
[0.55620913],
[0.55173085],
[0.47091505],
[0.4406142 ],
[0.46003751],
[0.43695245],
[0.47350929],
[0.46446272],
[0.44096924],
[0.42612415],
[0.36445566],
[0.35364846],
[0.31119482],
[0.31585693],
[0.32056198],
[0.31816947],
[0.34239104],
[0.37452194],
[0.33856988],
[0.35202687],
[0.35408461],
[0.35240239],
[0.32953852],
[0.33285111],
[0.31613201],
[0.28795604],
[0.17611388],
[0.13832029],
[0.17133332],
[0.18133143],
[0.18926786],
[0.18656966],
[0.19414692],
[0.21125779],
[0.22062888],
[0.21478722],
[0.22976421],
[0.23665383],
[0.18924086],
[0.19458038],
[0.30968454],
[0.30810319],
[0.33382572],
[0.37164011],
[0.37900674],
[0.3848424 ],
[0.36435262],
[0.33370665],
[0.32937744],
[0.32813396],
[0.33844667],
[0.39110325],
[0.37485981],
[0.28418463],
[0.27075661],
[0.27317136]])
# the training set as 60% and 40% testing set
training_size = int(len(closedf)*0.60)
test_size = len(closedf)-training_size
train_data , test_data =closedf[0:training_size,:],closedf[training_size:len(closedf),:1]
print('train_data:' , train_data.shape)
print('test_data:' , test_data.shape)
train_data: (219, 1) test_data: (146, 1)
#convert an array of values into a dataset matrix
def create_dataset ( dataset , time_step=1):
dataX , dataY=[],[]
for i in range (len(dataset)-time_step-1):
a= dataset[i:(i+time_step),0]
dataX.append(a)
dataY.append(dataset[i+ time_step , 0])
return np.array(dataX) ,np.array(dataY)
time_step = 15
X_train, y_train = create_dataset(train_data , time_step)
X_test, y_test = create_dataset (test_data , time_step)
print("X_train:" , X_train.shape)
print("y_train:" , y_train.shape)
print("X_test:" , X_test.shape)
print("y_test:" , y_test.shape)
X_train: (203, 15) y_train: (203,) X_test: (130, 15) y_test: (130,)
#reshape input to be [samples , time steps , feature]which requiresd gfor lSTM
X_train = X_train.reshape(X_train.shape[0] ,X_train.shape[1] ,1)
X_test = X_test.reshape(X_test.shape[0] ,X_test.shape[1] ,1)
print("X_train: ",X_train.shape)
print("X_test: ",X_test.shape)
X_train: (203, 15, 1) X_test: (130, 15, 1)
model= Sequential()
model.add(LSTM( 10 , input_shape=(None , 1) , activation ="relu"))
model.add(Dense(1))
model.compile(loss="mean_squared_error",optimizer="adam")
history = model.fit(X_train , y_train, validation_data=(X_test,y_test), epochs=200, batch_size=32,verbose=1)
Epoch 1/200 7/7 [==============================] - 6s 180ms/step - loss: 0.2597 - val_loss: 0.3680 Epoch 2/200 7/7 [==============================] - 0s 43ms/step - loss: 0.2249 - val_loss: 0.3158 Epoch 3/200 7/7 [==============================] - 0s 31ms/step - loss: 0.1904 - val_loss: 0.2611 Epoch 4/200 7/7 [==============================] - 0s 32ms/step - loss: 0.1534 - val_loss: 0.2013 Epoch 5/200 7/7 [==============================] - 0s 33ms/step - loss: 0.1147 - val_loss: 0.1330 Epoch 6/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0709 - val_loss: 0.0567 Epoch 7/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0281 - val_loss: 0.0140 Epoch 8/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0167 - val_loss: 0.0418 Epoch 9/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0163 - val_loss: 0.0113 Epoch 10/200 7/7 [==============================] - 0s 40ms/step - loss: 0.0137 - val_loss: 0.0108 Epoch 11/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0139 - val_loss: 0.0104 Epoch 12/200 7/7 [==============================] - 0s 25ms/step - loss: 0.0129 - val_loss: 0.0125 Epoch 13/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0130 - val_loss: 0.0131 Epoch 14/200 7/7 [==============================] - 0s 30ms/step - loss: 0.0128 - val_loss: 0.0113 Epoch 15/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0124 - val_loss: 0.0098 Epoch 16/200 7/7 [==============================] - 0s 25ms/step - loss: 0.0125 - val_loss: 0.0097 Epoch 17/200 7/7 [==============================] - 0s 27ms/step - loss: 0.0122 - val_loss: 0.0100 Epoch 18/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0123 - val_loss: 0.0123 Epoch 19/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0118 - val_loss: 0.0095 Epoch 20/200 7/7 [==============================] - 0s 56ms/step - loss: 0.0115 - val_loss: 0.0090 Epoch 21/200 7/7 [==============================] - 0s 36ms/step - loss: 0.0114 - val_loss: 0.0089 Epoch 22/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0112 - val_loss: 0.0107 Epoch 23/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0108 - val_loss: 0.0087 Epoch 24/200 7/7 [==============================] - 0s 36ms/step - loss: 0.0106 - val_loss: 0.0082 Epoch 25/200 7/7 [==============================] - 0s 40ms/step - loss: 0.0104 - val_loss: 0.0089 Epoch 26/200 7/7 [==============================] - 0s 32ms/step - loss: 0.0103 - val_loss: 0.0094 Epoch 27/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0100 - val_loss: 0.0078 Epoch 28/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0097 - val_loss: 0.0083 Epoch 29/200 7/7 [==============================] - 0s 37ms/step - loss: 0.0095 - val_loss: 0.0080 Epoch 30/200 7/7 [==============================] - 0s 27ms/step - loss: 0.0092 - val_loss: 0.0073 Epoch 31/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0090 - val_loss: 0.0071 Epoch 32/200 7/7 [==============================] - 0s 30ms/step - loss: 0.0080 - val_loss: 0.0061 Epoch 33/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0072 - val_loss: 0.0062 Epoch 34/200 7/7 [==============================] - 0s 32ms/step - loss: 0.0075 - val_loss: 0.0052 Epoch 35/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0068 - val_loss: 0.0073 Epoch 36/200 7/7 [==============================] - 0s 27ms/step - loss: 0.0066 - val_loss: 0.0044 Epoch 37/200 7/7 [==============================] - 0s 32ms/step - loss: 0.0063 - val_loss: 0.0048 Epoch 38/200 7/7 [==============================] - 0s 32ms/step - loss: 0.0060 - val_loss: 0.0040 Epoch 39/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0057 - val_loss: 0.0045 Epoch 40/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0055 - val_loss: 0.0037 Epoch 41/200 7/7 [==============================] - 0s 24ms/step - loss: 0.0055 - val_loss: 0.0038 Epoch 42/200 7/7 [==============================] - 0s 27ms/step - loss: 0.0053 - val_loss: 0.0036 Epoch 43/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0051 - val_loss: 0.0037 Epoch 44/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0052 - val_loss: 0.0036 Epoch 45/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0050 - val_loss: 0.0036 Epoch 46/200 7/7 [==============================] - 0s 25ms/step - loss: 0.0050 - val_loss: 0.0035 Epoch 47/200 7/7 [==============================] - 0s 24ms/step - loss: 0.0054 - val_loss: 0.0036 Epoch 48/200 7/7 [==============================] - 0s 32ms/step - loss: 0.0050 - val_loss: 0.0035 Epoch 49/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0049 - val_loss: 0.0038 Epoch 50/200 7/7 [==============================] - 0s 30ms/step - loss: 0.0050 - val_loss: 0.0035 Epoch 51/200 7/7 [==============================] - 0s 27ms/step - loss: 0.0050 - val_loss: 0.0037 Epoch 52/200 7/7 [==============================] - 0s 25ms/step - loss: 0.0047 - val_loss: 0.0036 Epoch 53/200 7/7 [==============================] - 0s 30ms/step - loss: 0.0048 - val_loss: 0.0037 Epoch 54/200 7/7 [==============================] - 0s 26ms/step - loss: 0.0047 - val_loss: 0.0035 Epoch 55/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0049 - val_loss: 0.0034 Epoch 56/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0046 - val_loss: 0.0037 Epoch 57/200 7/7 [==============================] - 0s 25ms/step - loss: 0.0047 - val_loss: 0.0034 Epoch 58/200 7/7 [==============================] - 0s 23ms/step - loss: 0.0046 - val_loss: 0.0035 Epoch 59/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0045 - val_loss: 0.0038 Epoch 60/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0045 - val_loss: 0.0034 Epoch 61/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0045 - val_loss: 0.0035 Epoch 62/200 7/7 [==============================] - 0s 25ms/step - loss: 0.0044 - val_loss: 0.0039 Epoch 63/200 7/7 [==============================] - 0s 24ms/step - loss: 0.0045 - val_loss: 0.0034 Epoch 64/200 7/7 [==============================] - 0s 27ms/step - loss: 0.0049 - val_loss: 0.0034 Epoch 65/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0045 - val_loss: 0.0041 Epoch 66/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0043 - val_loss: 0.0034 Epoch 67/200 7/7 [==============================] - 0s 27ms/step - loss: 0.0044 - val_loss: 0.0035 Epoch 68/200 7/7 [==============================] - 0s 25ms/step - loss: 0.0043 - val_loss: 0.0034 Epoch 69/200 7/7 [==============================] - 0s 24ms/step - loss: 0.0043 - val_loss: 0.0035 Epoch 70/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0043 - val_loss: 0.0034 Epoch 71/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0043 - val_loss: 0.0034 Epoch 72/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0042 - val_loss: 0.0037 Epoch 73/200 7/7 [==============================] - 0s 25ms/step - loss: 0.0043 - val_loss: 0.0035 Epoch 74/200 7/7 [==============================] - 0s 25ms/step - loss: 0.0042 - val_loss: 0.0035 Epoch 75/200 7/7 [==============================] - 0s 27ms/step - loss: 0.0042 - val_loss: 0.0035 Epoch 76/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0044 - val_loss: 0.0034 Epoch 77/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0043 - val_loss: 0.0038 Epoch 78/200 7/7 [==============================] - 0s 26ms/step - loss: 0.0042 - val_loss: 0.0034 Epoch 79/200 7/7 [==============================] - 0s 23ms/step - loss: 0.0042 - val_loss: 0.0041 Epoch 80/200 7/7 [==============================] - 0s 25ms/step - loss: 0.0041 - val_loss: 0.0033 Epoch 81/200 7/7 [==============================] - 0s 27ms/step - loss: 0.0042 - val_loss: 0.0035 Epoch 82/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0043 - val_loss: 0.0035 Epoch 83/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0042 - val_loss: 0.0033 Epoch 84/200 7/7 [==============================] - 0s 24ms/step - loss: 0.0040 - val_loss: 0.0040 Epoch 85/200 7/7 [==============================] - 0s 26ms/step - loss: 0.0044 - val_loss: 0.0034 Epoch 86/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0041 - val_loss: 0.0033 Epoch 87/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0043 - val_loss: 0.0037 Epoch 88/200 7/7 [==============================] - 0s 27ms/step - loss: 0.0040 - val_loss: 0.0033 Epoch 89/200 7/7 [==============================] - 0s 27ms/step - loss: 0.0040 - val_loss: 0.0035 Epoch 90/200 7/7 [==============================] - 0s 25ms/step - loss: 0.0042 - val_loss: 0.0033 Epoch 91/200 7/7 [==============================] - 0s 25ms/step - loss: 0.0041 - val_loss: 0.0033 Epoch 92/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0040 - val_loss: 0.0035 Epoch 93/200 7/7 [==============================] - 0s 30ms/step - loss: 0.0039 - val_loss: 0.0033 Epoch 94/200 7/7 [==============================] - 0s 33ms/step - loss: 0.0040 - val_loss: 0.0033 Epoch 95/200 7/7 [==============================] - 0s 25ms/step - loss: 0.0041 - val_loss: 0.0042 Epoch 96/200 7/7 [==============================] - 0s 30ms/step - loss: 0.0040 - val_loss: 0.0032 Epoch 97/200 7/7 [==============================] - 0s 27ms/step - loss: 0.0040 - val_loss: 0.0033 Epoch 98/200 7/7 [==============================] - 0s 34ms/step - loss: 0.0038 - val_loss: 0.0033 Epoch 99/200 7/7 [==============================] - 0s 35ms/step - loss: 0.0038 - val_loss: 0.0032 Epoch 100/200 7/7 [==============================] - 0s 30ms/step - loss: 0.0039 - val_loss: 0.0033 Epoch 101/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0038 - val_loss: 0.0035 Epoch 102/200 7/7 [==============================] - 0s 32ms/step - loss: 0.0040 - val_loss: 0.0033 Epoch 103/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0040 - val_loss: 0.0035 Epoch 104/200 7/7 [==============================] - 0s 30ms/step - loss: 0.0038 - val_loss: 0.0033 Epoch 105/200 7/7 [==============================] - 0s 26ms/step - loss: 0.0039 - val_loss: 0.0032 Epoch 106/200 7/7 [==============================] - 0s 30ms/step - loss: 0.0037 - val_loss: 0.0037 Epoch 107/200 7/7 [==============================] - 0s 37ms/step - loss: 0.0038 - val_loss: 0.0032 Epoch 108/200 7/7 [==============================] - 0s 43ms/step - loss: 0.0037 - val_loss: 0.0032 Epoch 109/200 7/7 [==============================] - 0s 35ms/step - loss: 0.0037 - val_loss: 0.0031 Epoch 110/200 7/7 [==============================] - 0s 33ms/step - loss: 0.0037 - val_loss: 0.0033 Epoch 111/200 7/7 [==============================] - 0s 38ms/step - loss: 0.0037 - val_loss: 0.0033 Epoch 112/200 7/7 [==============================] - 0s 35ms/step - loss: 0.0037 - val_loss: 0.0031 Epoch 113/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0036 - val_loss: 0.0031 Epoch 114/200 7/7 [==============================] - 0s 30ms/step - loss: 0.0036 - val_loss: 0.0033 Epoch 115/200 7/7 [==============================] - 0s 26ms/step - loss: 0.0036 - val_loss: 0.0031 Epoch 116/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0036 - val_loss: 0.0032 Epoch 117/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0035 - val_loss: 0.0029 Epoch 118/200 7/7 [==============================] - 0s 30ms/step - loss: 0.0036 - val_loss: 0.0032 Epoch 119/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0035 - val_loss: 0.0029 Epoch 120/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0036 - val_loss: 0.0030 Epoch 121/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0035 - val_loss: 0.0032 Epoch 122/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0037 - val_loss: 0.0029 Epoch 123/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0037 - val_loss: 0.0030 Epoch 124/200 7/7 [==============================] - 0s 27ms/step - loss: 0.0040 - val_loss: 0.0031 Epoch 125/200 7/7 [==============================] - 0s 26ms/step - loss: 0.0038 - val_loss: 0.0028 Epoch 126/200 7/7 [==============================] - 0s 30ms/step - loss: 0.0036 - val_loss: 0.0031 Epoch 127/200 7/7 [==============================] - 0s 35ms/step - loss: 0.0034 - val_loss: 0.0028 Epoch 128/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0033 - val_loss: 0.0033 Epoch 129/200 7/7 [==============================] - 0s 25ms/step - loss: 0.0036 - val_loss: 0.0029 Epoch 130/200 7/7 [==============================] - 0s 26ms/step - loss: 0.0034 - val_loss: 0.0029 Epoch 131/200 7/7 [==============================] - 0s 27ms/step - loss: 0.0034 - val_loss: 0.0031 Epoch 132/200 7/7 [==============================] - 0s 36ms/step - loss: 0.0033 - val_loss: 0.0028 Epoch 133/200 7/7 [==============================] - 0s 36ms/step - loss: 0.0034 - val_loss: 0.0029 Epoch 134/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0032 - val_loss: 0.0027 Epoch 135/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0032 - val_loss: 0.0029 Epoch 136/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0032 - val_loss: 0.0027 Epoch 137/200 7/7 [==============================] - 0s 33ms/step - loss: 0.0032 - val_loss: 0.0027 Epoch 138/200 7/7 [==============================] - 0s 36ms/step - loss: 0.0032 - val_loss: 0.0028 Epoch 139/200 7/7 [==============================] - 0s 36ms/step - loss: 0.0031 - val_loss: 0.0027 Epoch 140/200 7/7 [==============================] - 0s 40ms/step - loss: 0.0031 - val_loss: 0.0028 Epoch 141/200 7/7 [==============================] - 0s 36ms/step - loss: 0.0031 - val_loss: 0.0026 Epoch 142/200 7/7 [==============================] - 0s 33ms/step - loss: 0.0032 - val_loss: 0.0026 Epoch 143/200 7/7 [==============================] - 0s 27ms/step - loss: 0.0030 - val_loss: 0.0026 Epoch 144/200 7/7 [==============================] - 0s 25ms/step - loss: 0.0031 - val_loss: 0.0027 Epoch 145/200 7/7 [==============================] - 0s 27ms/step - loss: 0.0030 - val_loss: 0.0026 Epoch 146/200 7/7 [==============================] - 0s 32ms/step - loss: 0.0030 - val_loss: 0.0026 Epoch 147/200 7/7 [==============================] - 0s 32ms/step - loss: 0.0030 - val_loss: 0.0026 Epoch 148/200 7/7 [==============================] - 0s 27ms/step - loss: 0.0030 - val_loss: 0.0026 Epoch 149/200 7/7 [==============================] - 0s 25ms/step - loss: 0.0029 - val_loss: 0.0026 Epoch 150/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0029 - val_loss: 0.0028 Epoch 151/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0030 - val_loss: 0.0027 Epoch 152/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0029 - val_loss: 0.0034 Epoch 153/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0029 - val_loss: 0.0029 Epoch 154/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0029 - val_loss: 0.0038 Epoch 155/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0030 - val_loss: 0.0033 Epoch 156/200 7/7 [==============================] - 0s 32ms/step - loss: 0.0030 - val_loss: 0.0030 Epoch 157/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0029 - val_loss: 0.0027 Epoch 158/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0028 - val_loss: 0.0027 Epoch 159/200 7/7 [==============================] - 0s 24ms/step - loss: 0.0028 - val_loss: 0.0029 Epoch 160/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0030 - val_loss: 0.0030 Epoch 161/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0029 - val_loss: 0.0028 Epoch 162/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0028 - val_loss: 0.0027 Epoch 163/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0029 - val_loss: 0.0027 Epoch 164/200 7/7 [==============================] - 0s 32ms/step - loss: 0.0028 - val_loss: 0.0027 Epoch 165/200 7/7 [==============================] - 0s 30ms/step - loss: 0.0029 - val_loss: 0.0034 Epoch 166/200 7/7 [==============================] - 0s 33ms/step - loss: 0.0028 - val_loss: 0.0032 Epoch 167/200 7/7 [==============================] - 0s 35ms/step - loss: 0.0029 - val_loss: 0.0028 Epoch 168/200 7/7 [==============================] - 0s 32ms/step - loss: 0.0028 - val_loss: 0.0032 Epoch 169/200 7/7 [==============================] - 0s 32ms/step - loss: 0.0029 - val_loss: 0.0030 Epoch 170/200 7/7 [==============================] - 0s 34ms/step - loss: 0.0028 - val_loss: 0.0028 Epoch 171/200 7/7 [==============================] - 0s 45ms/step - loss: 0.0029 - val_loss: 0.0030 Epoch 172/200 7/7 [==============================] - 0s 36ms/step - loss: 0.0029 - val_loss: 0.0028 Epoch 173/200 7/7 [==============================] - 0s 33ms/step - loss: 0.0029 - val_loss: 0.0035 Epoch 174/200 7/7 [==============================] - 0s 32ms/step - loss: 0.0028 - val_loss: 0.0028 Epoch 175/200 7/7 [==============================] - 0s 32ms/step - loss: 0.0028 - val_loss: 0.0028 Epoch 176/200 7/7 [==============================] - 0s 38ms/step - loss: 0.0028 - val_loss: 0.0033 Epoch 177/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0029 - val_loss: 0.0031 Epoch 178/200 7/7 [==============================] - 0s 26ms/step - loss: 0.0030 - val_loss: 0.0043 Epoch 179/200 7/7 [==============================] - 0s 30ms/step - loss: 0.0031 - val_loss: 0.0070 Epoch 180/200 7/7 [==============================] - 0s 35ms/step - loss: 0.0035 - val_loss: 0.0049 Epoch 181/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0035 - val_loss: 0.0031 Epoch 182/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0029 - val_loss: 0.0029 Epoch 183/200 7/7 [==============================] - 0s 25ms/step - loss: 0.0028 - val_loss: 0.0028 Epoch 184/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0029 - val_loss: 0.0027 Epoch 185/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0029 - val_loss: 0.0026 Epoch 186/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0028 - val_loss: 0.0027 Epoch 187/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0028 - val_loss: 0.0027 Epoch 188/200 7/7 [==============================] - 0s 24ms/step - loss: 0.0028 - val_loss: 0.0029 Epoch 189/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0028 - val_loss: 0.0029 Epoch 190/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0030 - val_loss: 0.0031 Epoch 191/200 7/7 [==============================] - 0s 31ms/step - loss: 0.0028 - val_loss: 0.0028 Epoch 192/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0028 - val_loss: 0.0029 Epoch 193/200 7/7 [==============================] - 0s 25ms/step - loss: 0.0027 - val_loss: 0.0028 Epoch 194/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0029 - val_loss: 0.0037 Epoch 195/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0028 - val_loss: 0.0028 Epoch 196/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0027 - val_loss: 0.0043 Epoch 197/200 7/7 [==============================] - 0s 30ms/step - loss: 0.0029 - val_loss: 0.0028 Epoch 198/200 7/7 [==============================] - 0s 28ms/step - loss: 0.0028 - val_loss: 0.0028 Epoch 199/200 7/7 [==============================] - 0s 27ms/step - loss: 0.0031 - val_loss: 0.0030 Epoch 200/200 7/7 [==============================] - 0s 29ms/step - loss: 0.0027 - val_loss: 0.0029
Plotting loss vs validation loss
loss= history.history['loss']
val_loss = history.history['val_loss']
epochs = range(len(loss))
plt.plot(epochs , loss, 'r' , label='Training loss')
plt.plot(epochs , val_loss, 'b' , label='Validation loss')
plt.title('Training and Validation loss')
plt.legend(loc=0)
plt.figure()
plt.show()
<Figure size 640x480 with 0 Axes>
#do the prediction and chech performance metrics
train_predict=model.predict(X_train)
test_predict=model.predict(X_test)
train_predict.shape , test_predict.shape
7/7 [==============================] - 1s 7ms/step 5/5 [==============================] - 0s 5ms/step
((203, 1), (130, 1))
#transform back to original form
train_predict= scaler.inverse_transform(train_predict)
test__predict= scaler.inverse_transform(test_predict)
original_ytrain= scaler.inverse_transform(y_train.reshape(-1,1))
original_ytest= scaler.inverse_transform(y_test.reshape(-1,1))
#Evaluation metrices RMSE and MAE
print ("Train data RMSE" , math.sqrt(mean_squared_error(original_ytrain ,train_predict)))
print("Train data MSE :" , mean_squared_error(original_ytrain , train_predict))
print("Train data MAE: ", mean_absolute_error(original_ytrain , train_predict))
print("----------------------------------------------------------------------------------------------")
print ("Test data RMSE" , math.sqrt(mean_squared_error(original_ytest ,test_predict)))
print("Test data MSE:" , mean_squared_error(original_ytest , test_predict))
print("Test data MAE:", mean_absolute_error(original_ytest , test_predict) )
Train data RMSE 2024.0435355669936 Train data MSE : 4096752.2338705356 Train data MAE: 1627.7007678171178 ---------------------------------------------------------------------------------------------- Test data RMSE 51514.50823689252 Test data MSE: 2653744558.8888674 Test data MAE: 50716.51244911729
print("Train data explained variance regression score:",
explained_variance_score(original_ytrain , train_predict))
print("Test data explained variance regression score:",
explained_variance_score(original_ytest , test_predict))
Train data explained variance regression score: 0.9544086456839961 Test data explained variance regression score: 4.828686840196994e-05
print("Train data R2 score :", r2_score(original_ytrain , train_predict))
print("Test data R2 score :", r2_score(original_ytest , test_predict))
Train data R2 score : 0.9529153126836228 Test data R2 score : -31.527811885890863
print("Train data MGD :" , mean_gamma_deviance(original_ytrain , train_predict))
print("Test data MGD:", mean_gamma_deviance(original_ytest , test_predict))
print("----------------------------------------------------------------------------------------------")
print ("Train data MPD" , mean_poisson_deviance(original_ytrain ,train_predict))
print("Test data MPD:" , mean_poisson_deviance(original_ytest , test_predict))
Train data MGD : 0.002058731278305184 Test data MGD: 212418.36536487108 ---------------------------------------------------------------------------------------------- Train data MPD 90.20594226156709 Test data MPD: 1063029.6838295942
#shift key prediction
#shift train predictions for plottin
look_back=time_step
trainPredictPlot= np.empty_like(closedf)
trainPredictPlot[:, :]=np.nan
trainPredictPlot[look_back:len(train_predict)+look_back, :]=train_predict
print("Train predicted data :",trainPredictPlot.shape)
#shift test predictions for plotting
testPredictPlot= np.empty_like(closedf)
testPredictPlot[:, :]= np.nan
testPredictPlot[len(train_predict)+(look_back*2)+1 :len(closedf)-1 ,:]=test_predict
print("Test predicted data :",testPredictPlot.shape)
names=cycle(['Original close price','Train predicted close price ','Test predicted close price'])
plotdf = pd.DataFrame({'date': close_stock ['Date'],
'original_close':close_stock['Close'],
'train_predicted_close': trainPredictPlot.reshape(1,-1)[0].tolist(),
'test_predicted_close': testPredictPlot.reshape(1,-1)[0].tolist()})
fig= px.line(plotdf,x=plotdf['date'],y=[plotdf ['original_close'],plotdf['train_predicted_close'],plotdf['test_predicted_close']],
labels={'value':'Stock price','date': 'Date'})
fig.update_layout(title_text='Comparision between original close price vs predicted close price',
plot_bgcolor='white',font_size=15 ,font_color='black' ,legend_title_text='Close price')
fig.for_each_trace(lambda t: t.update(name=next(names)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()
Train predicted data : (365, 1) Test predicted data : (365, 1)
x_input = test_data[len(test_data)-time_step:].reshape(1,-1)
temp_input=list(x_input)
temp_input=temp_input[0].tolist()
from numpy import array
lst_output=[]
n_steps=time_step
i=0
pred_days =30
while(i<pred_days):
if(len(temp_input)>time_step):
x_input =np.array(temp_input[1:])
x_input= x_input.reshape(1,-1)
x_input= x_input.reshape ((1, n_steps ,1))
yhat= model.predict(x_input , verbose=0)
temp_input.extend(yhat[0].tolist())
temp_input = temp_input[1:]
lst_output.extend(yhat.tolist())
i=i+1
else:
x_input=x_input.reshape(1, n_steps ,1)
yhat= model.predict(x_input , verbose=0)
temp_input.extend(yhat[0].tolist())
lst_output.extend(yhat.tolist())
i=i+1
print("Output of predicted next days :",len(lst_output))
Output of predicted next days : 30
last_days =np.arange(1 , time_step+1)
day_pred= np.arange(time_step+1 , time_step+pred_days+1)
print(last_days)
print(day_pred)
[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] [16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45]
temp_mat =np.empty((len(last_days)+pred_days+1,1))
temp_mat[:]=np.nan
temp_mat=temp_mat.reshape(1,-1).tolist()[0]
last_original_days_value = temp_mat
next_predicted_days_value= temp_mat
last_original_days_value[0:time_step+1]= scaler.inverse_transform(closedf[len(closedf)-time_step:]).reshape(1,-1).tolist()[0]
next_predicted_days_value[time_step+1:]=scaler.inverse_transform(np.array(lst_output).reshape(1,-1)).tolist()[0]
new_pred_plot = pd.DataFrame ({
'last_original_days_value': last_original_days_value,
'next_predicted_days_value': next_predicted_days_value
})
names= cycle (['Last 15 days close price','Predicted next 30 days close price'])
fig=px.line(new_pred_plot,x=new_pred_plot.index, y=[new_pred_plot['last_original_days_value'],
new_pred_plot['next_predicted_days_value']],
labels={'value':'Stock price','index':'Timestamp'})
fig.update_layout(title_text='Compare last 15 days vs next 30 days',
plot_bgcolor='white',font_size=15 ,font_color='black' ,legend_title_text='Close price')
fig.for_each_trace(lambda t: t.update(name=next(names)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()
lstmdf=closedf.tolist()
lstmdf.extend((np.array(lst_output).reshape(-1,1)).tolist())
lstmdf=scaler.inverse_transform(lstmdf).reshape(1,-1).tolist()[0]
names =cycle(['Close price'])
fig=px.line(lstmdf , labels={'value': 'Stock price','index':'Timestamp'})
fig.update_layout(title_text='Plotting whole closing stock price with prediction',
plot_bgcolor='white', font_size=15 , font_color='black' , legend_title_text='Stock')
fig.for_each_trace(lambda t: t.update(name= next (names)))
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()
Bitcoin Price Prediction Using LSTM.